﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Onshi.POS.Ubicaciones.Vistas;
using Onshi.POS.Ubicaciones;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;

namespace Onshi.POS.Formularios.Controles
{
    public partial class BarriosSeleccionarMultiple : UserControl, IBarriosSeleccionarMultiple
    {
        #region Constructores

        public BarriosSeleccionarMultiple()
        {
            InitializeComponent();
            presentador = new BarriosSeleccionarMultiplePresentador(this);
        }

        #endregion

        #region Atributos

        private BarriosSeleccionarMultiplePresentador presentador;
        private Boolean estanSeleccionados = true;
        private List<Int32> idBarriosSeleccionados = new List<Int32>();
        private Boolean agregando = false;
        public delegate void SeleccionadoHandler();
        public event SeleccionadoHandler Seleccionado = delegate { };

        #endregion

        #region Propiedades

        public List<Int32> IdBarriosSeleccionados
        {
            get { return idBarriosSeleccionados; }
        }

        [Browsable(false)]
        public Int32 IdLocalidad
        {
            get { return ucLocalidad.IdLocalidadSeleccionado; }
            set { ucLocalidad.IdLocalidadSeleccionado = value; }
        }

        [Browsable(false)]
        public List<Barrio> ListadoBarrios
        {
            set
            {
                agregando = true;
                estanSeleccionados = true;
                lstBarrios.Items.Clear();
                foreach (var item in value)
                    lstBarrios.Items.Add(item, true);
                agregando = false;
                lstBarrios.DisplayMember = "Nombre";
            }
        }

        #endregion

        #region Metodos

        public void Actualizar()
        {
            presentador.Actualizar();
        }

        public void LimpiarCampos()
        {
            ucLocalidad.IdLocalidadSeleccionado = (Int32)EnumLocalidades.Todos;
            ucLocalidad.Actualizar();
        }

        #endregion

        #region Eventos

        private void btnMarcarDesmarcar_Click(Object sender, EventArgs e)
        {
            agregando = true;
            for (var i = 0; i < lstBarrios.Items.Count; i++)
                lstBarrios.SetItemChecked(i, !estanSeleccionados);
            estanSeleccionados = !estanSeleccionados;
            agregando = false;
            Seleccionado();
        }

        private void ucLocalidad_Seleccionado()
        {
            presentador.Actualizar();
            Seleccionado();
        }

        private void lstBarrios_ItemCheck(Object sender, ItemCheckEventArgs e)
        {
            idBarriosSeleccionados.Clear();
            foreach (Barrio item in lstBarrios.CheckedItems)
                idBarriosSeleccionados.Add(item.Id);
            if (e.NewValue == CheckState.Checked)
                idBarriosSeleccionados.Add(((Barrio)lstBarrios.Items[e.Index]).Id);
            else if (e.NewValue == CheckState.Unchecked)
                idBarriosSeleccionados.Remove(((Barrio)lstBarrios.Items[e.Index]).Id);

            if (!agregando)
                Seleccionado();
        }

        #endregion
    }
}
